package com.album.activity.page;

import java.lang.ref.SoftReference;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import com.album.R; 
import com.album.bean.ImageBean;
import com.album.common.Constants; 
import com.album.utils.MyLog;

import android.app.ProgressDialog;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.provider.MediaStore;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CursorAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;

public class PhotoImageListAdapter extends BaseAdapter {
	private List<Bitmap> tempMap = new ArrayList<Bitmap>();
    private LayoutInflater inflater;  
    private final Context mContext;
	private Bitmap bitmap;
    
	public PhotoImageListAdapter(Context context, List<Bitmap> data) {
		mContext = context;
        this.inflater = LayoutInflater.from(context);
		tempMap = data; 
	}
	
	public void setNotifyDataSetChanged(Bitmap bitmap){
		tempMap.add(bitmap);
		this.notifyDataSetChanged();
	}
	  
	@Override
	public View getView(int position, View convertView, ViewGroup paramViewGroup) {
		// TODO Auto-generated method stub
		ViewHolder holder;  
        if (convertView == null) {      
            holder = new ViewHolder();  
            convertView = inflater.inflate(R.layout.image_item, null);     
            holder.imageView = (ImageView)convertView.findViewById(R.id.image);
            holder.imageView.setLayoutParams(new RelativeLayout.LayoutParams(Constants.m_screenWidth,Constants.m_screenWidth));
            convertView.setTag(holder);     
        }
        else{ 
            holder = (ViewHolder) convertView.getTag();
        }
        Bitmap bitmap = tempMap.get(position);
    	if(bitmap!=null)
    		holder.imageView.setImageBitmap(bitmap);
        return convertView;
	}

//	class loadingImageFolder extends AsyncTask<Integer,Bitmap,Integer>{
//		
//		private ViewHolder mHolder;
//		public loadingImageFolder(ViewHolder holder){
//			this.mHolder =holder;
//		}
//		@Override
//		protected Integer doInBackground(Integer... params) {
////	        String value = cursor.getString(cursor.getColumnIndex("_data"));
////			if (tempMap != null && tempMap.get(value).get() != null && !tempMap.get(value).get().isRecycled()) { 
////	    	if (tempMap != null && tempMap.get(value).get() != null && !tempMap.get(value).get().isRecycled()) { 
//	        	int id = _cursor.getInt(_cursor.getColumnIndex("_ID"));
//	        	Bitmap bitmap = MediaStore.Images.Thumbnails.getThumbnail(mContext.getContentResolver(), id,
//						MediaStore.Images.Thumbnails.MICRO_KIND, options);
//	        	if(bitmap!=null){
//	        		this.publishProgress(bitmap);
//	        	}
////			}
//			return 1;
//		} 
//		
//		@Override
//		protected void onProgressUpdate(Bitmap... bitmap) {
//			// TODO Auto-generated method stub 
//			if(bitmap!=null){
//				MyLog.debug(getClass(), "---------------");
//				mHolder.imageView.setImageBitmap(bitmap[0]);
//        		notifyDataSetChanged();
//			}
//		}
//		@Override  
//	    protected void onCancelled() {  
//			super.onCancelled();  
//	    }  
//		 
//		@Override
//		protected void onPostExecute(Integer result) {
//			if(result==1){
//				
//			}
//			if (dialog != null) { dialog.dismiss();
//				dialog = null;
//			}
//    		notifyDataSetChanged();
//		}
//	}
	
	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}
	
	@Override
	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return tempMap.get(position);
	}

	public void clearDataSource(){
    	try {
    		if(tempMap!=null && tempMap.size()>0){
//        		Iterator<Entry<String, SoftReference<Bitmap>>> it = tempMap.iterator();
//        		while(it.hasNext()){
//        			Map.Entry<String, SoftReference<Bitmap>> entry = (Map.Entry<String, SoftReference<Bitmap>>) it.next();
//        			SoftReference<Bitmap> sBitmap = entry.getValue();
//        			Bitmap bitmap = sBitmap.get();
//        			if(bitmap!=null && bitmap.isRecycled()){
//        				bitmap.recycle(); 
//        				bitmap=null;
//        			}
//        			MyLog.debug(getClass(), "........");
//        			sBitmap.clear();
//        			sBitmap=null;
//        			entry=null;
//        		}
    			Iterator<Bitmap> it = tempMap.iterator();
        		while(it.hasNext()){ 
        			Bitmap bitmap = it.next();
        			if(bitmap!=null && bitmap.isRecycled()){
        				bitmap.recycle(); 
        				bitmap=null;
        			}
        			MyLog.debug(getClass(), "........"); 
        			bitmap=null;
        			bitmap=null;
        		}
        		tempMap.clear();
        	}
		} catch (Exception e) { e.printStackTrace();}
    }
	
	@Override
	public int getCount() {
		return (tempMap!=null && tempMap.size()>0) ? tempMap.size() : 0;
	}
	
	public class ViewHolder {
		
		private ImageView imageView; 
	}
	
}
